package test1;

import service.HasSelfPrivateNum;
import extthread.ThreadA;
import extthread.ThreadB;

/**
　* @Description: TODO
　* @param ${tags}
　* @return ${return_type}
　* @throws
　* @author Merlin
　* @date 2018/6/19 10:14
　*/

/**
 * 方法内的变量为线程安全
 * “非线程安全”问题存在于“实例变量”中，如果是方法内部的私有变量，则不存在"非线程安全"问题，
 * 所得结果也就是“线程安全”的了
 * 示例：就是实现方法内部声明一个变量时，是不存在“非线程安全”问题的
 */
public class Run {

	public static void main(String[] args) {

		HasSelfPrivateNum numRef = new HasSelfPrivateNum();

		ThreadA athread = new ThreadA(numRef);
		athread.start();

		ThreadB bthread = new ThreadB(numRef);
		bthread.start();

	}

	/**
	 * 输出结果：
	 * a set over!
	   b set over!
	   b num=200
	   a num=100
	 *
	 * 方法中的变量不存在非线程安全问题，永远都是线程安全的。这是方法内部的变量是私有的特性造成的。
	 */
}
